/*
 * Copyright 2007 Peter Zelenay.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *     
*/
package net.zelenay.jcrviewer.tree;

import java.util.ArrayList;
import java.util.List;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

/**
 * 
 * @author Peter Zelenay
 *
 */
public class RepositoryNodeProvider implements NodeProvider {

	private Session session;
	
	public Session getSession() {
		return session;
	}

	public void setSession(Session session) {
		this.session = session;
	}

	public AsyncNode[] getChild(AsyncNode parent) {
		Object obj = parent.getUserObject();
		if (obj == null || !(obj instanceof Node)) {
			// parent
			try {
				parent.setUserObject(session.getRootNode());
			} catch (RepositoryException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
		}
		Node parentNode = (Node) parent.getUserObject();
		try {
			NodeIterator i = parentNode.getNodes();
			List<RepositoryNode> nodes = new ArrayList<RepositoryNode>();
			while (i.hasNext()) {
				Node child = i.nextNode();
				boolean isLeaf = child.getNodes().getSize() > 0 ? false : true;
				nodes.add(new RepositoryNode(child, !isLeaf));
			}
			return nodes.toArray(new RepositoryNode[nodes.size()]);
		} catch (RepositoryException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

}
